﻿// Copyright (c) 2012 - 2020 Jared Zheng <jaredz at outlook dot com>
// Buddha Framework is licensed under Mulan PSL v2.
// You can use this software according to the terms and conditions of the Mulan PSL v2.
// You may obtain a copy of Mulan PSL v2 at:
//          http://license.coscl.org.cn/MulanPSL2
// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
// EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
// MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
// See the Mulan PSL v2 for more details.
//
// Create : 2012-12-01 version 0.1 Jared Zheng <jaredz at outlook dot com>
// Update : 2018-12-05 version 3.1.5 Jared Zheng <jaredz at outlook dot com>

#ifndef __ROUTINE_DEF_H__
#define __ROUTINE_DEF_H__

#pragma once

///////////////////////////////////////////////////////////////////////////////////////////////////////////
// 替换goto功能, a-必须为变量, b-必须为常量
// BEGIN_SCOPE( var_a, 0 );
// ...
// break; 跳出scope, 直接到END_SCOPE的下一条语句
// ...
// while (true)
// {
//     break; 跳出当前while
// }
// END_SCOPE();
// ...
#define BEGIN_SCOPE( a, b ) switch (a)  { case (b) : default: {
#define END_SCOPE() } }

///////////////////////////////////////////////////////////////////////////////////////////////////////////
// 错误定义
enum ROUTIN_DEF_ERROR
{
    ROUTINE_ERROR_COMMON = 100,        // 通用错误, 内存申请失败
    //
    ROUTINE_ERROR_NONE_AUTHOR,         // 无授权网关服务器
    ROUTINE_ERROR_NONE_GATE,           // 无业务网关服务器
    ROUTINE_ERROR_LINK_DISABLED,       // 连接注册routineid禁止
    ROUTINE_ERROR_LINK_ID,             // routineid冲突
    ROUTINE_ERROR_LINK_ONLINE,         // routineid服务器在线状态
    //
    ROUTINE_ERROR_REQ_DB,              // 数据库连接异常
    ROUTINE_ERROR_REQ_DBCACHE,         // 数据库缓存无效
    ROUTINE_ERROR_REQ_CACHE,           // 缓存无效
    ROUTINE_ERROR_REQ_DBSERVER,        // 需要对应数据服务
    ROUTINE_ERROR_REQ_MASTER,          // 需要业务管理服务
    ROUTINE_ERROR_REQ_SERVICE,         // 需要业务功能服务

    ROUTINE_ERROR_IDLE_TIMEOUT,        // 长时间无任何请求
    ROUTINE_ERROR_ACK_TIMEOUT,         // 处理超时
    ROUTINE_ERROR_OVER_LIMIT,          // 超上限
    ROUTINE_ERROR_WAIT_LIMIT,          // 等待超时
    ROUTINE_ERROR_KICK_LOGOUT,         // 踢除
    ROUTINE_ERROR_VOIDNESS_SESSION,    // 无效会话
    ROUTINE_ERROR_VOIDNESS_STATUS,     // 无效状态异常
    ROUTINE_ERROR_VOIDNESS_SRVID,      // 服务器Id重复无效
    ROUTINE_ERROR_VOIDNESS_RID,        // routineid对应业务功能还未上线
    ROUTINE_ERROR_VOIDNESS_DATA,       // 无效数据, 无法解析
};

#endif // __ROUTINE_DEF_H__
